package com.atguigu.cos.service.impl;

import com.atguigu.cos.service.CosService;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * @ClassName : CosServiceImpl
 * @Author : 骆发茂
 * @Date: 2021/11/13 10:28
 * @Description :
 */


@Service
public class CosServiceImpl implements CosService {


    // 指定文件将要存放的存储桶
    @Value("${bucketname}")
    private String bucketName;

    @Value("${endpoint}")
    private String endpoint;

    @Value("${bucketnameAndendpoint}")
    private String bucketnameAndendpoint;



    @Override
    public String uploadFileAvatar(MultipartFile file) {


        try {

            // 1 初始化用户身份信息（secretId, secretKey）。
            // 在腾讯云的密钥中心创建密钥，然后拿到SecretId和SecretKey
            String secretId = "AKIDKTMzMSHp68uQebIirjLgjW2HKAj36sNd";
            String secretKey = "0jBMGtFJ6csratue8MJ3WidHdjY6NN6Z";
            COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
            // bucket的地域，地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
            Region region = new Region("ap-guangzhou");
            // config可以设置请求参数，具体参考下表
            // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
            ClientConfig clientConfig = new ClientConfig(region);
            clientConfig.setHttpProtocol(HttpProtocol.https);
            // 生成 cos 客户端
            COSClient cosClient = new COSClient(cred, clientConfig);
            //获取上传文件输入流
            InputStream inputStream = file.getInputStream();
            //获取文件名称
            String fileName = file.getOriginalFilename();

            //1 在文件名称里面添加随机唯一的值
            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
            // yuy76t5rew01.jpg
            fileName = uuid + fileName;


            //2 把文件按照日期进行分类
            //获取当前日期
            //   2019/11/12
            String datePath = new DateTime().toString("yyyy/MM/dd");
            //拼接
            //  2019/11/12/ewtqr313401.jpg
            fileName = datePath + "/" + fileName;


// 指定文件上传到 COS 上的路径，即对象键。例如对象键为folder/picture.jpg，则表示将文件 picture.jpg 上传到 folder 路径下
            // 指定文件上传到 COS 上的路径，即对象键。例如对象键为folder/picture.jpg，则表示将文件 picture.jpg 上传到 folder 路径下
            String key = "exampleobject";
            ObjectMetadata metadata = new ObjectMetadata();

            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, inputStream, metadata);
            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
            // 关闭OSSClient。
            cosClient.shutdown();

            //把上传之后文件路径返回
            //需要把上传到阿里云oss路径手动拼接出来
//https://guli-file-1304955331.cos.ap-guangzhou.myqcloud.com/avatar/%E5%A4%B4%E5%83%8F.jpg
/*#不同的服务器，地址不同
endpoint=cos.ap-guangzhou.myqcloud.com
keyid=AKIDKTMzMSHp68uQebIirjLgjW2HKAj36sNd
keysecret=0jBMGtFJ6csratue8MJ3WidHdjY6NN6Z
#bucket可以在控制台创建，也可以使用java代码创建
bucketname=guli-file-1304955331
bucketnameAndendpoint=guli-file-1304955331.cos.ap-guangzhou.myqcloud.com
*/
          //  String url = "https://" + bucketnameAndendpoint + "/" + fileName;
            String url = "https://" + bucketnameAndendpoint + "/" + fileName;

            return url;
        } catch (IOException e) {
            e.printStackTrace();
            return null;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }
}